package com.chandon.T05_timeApi.T00_clock;

import java.time.*;

/**
 * Clock抽象类时区敏感，用于访问当前时间戳，时区ZoneId(System.currentTimeMills())。
 * 时间戳：1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
 *
 * @author Dong
 * @version 1.0
 * @date 2021-04-22 20:07
 */

public class T00_ClockTest {
    public static void main(String[] args) throws InterruptedException {

//        clockTestA();


//        clockTestB();

        /*
            获取不随时间变化的固定时钟
            2021-04-23T16:54:06.855Z
            2021-04-23T16:54:06.855Z
         */

        Clock clock = Clock.systemDefaultZone();
        Clock fixedClock = Clock.fixed(clock.instant(), clock.getZone());
        System.out.println(fixedClock.instant());
        Thread.sleep(1000);
        System.out.println(fixedClock.instant());


    }

    private static void clockTestB() throws InterruptedException {
    /*
        基于某个时钟，获取新的最接近上个周期或下个周期时钟
        2021-04-23T16:48:43.102Z
        2021-04-23T16:48:43.120Z
        2021-04-23T16:48:43.138Z
        2021-04-23T16:48:43.130Z
     */
        // 当前时钟
        Clock clockDefault = Clock.systemDefaultZone();
        Clock tickClock = Clock.tick(clockDefault, Duration.ofMillis(10));
        System.out.println(clockDefault.instant());
        System.out.println(tickClock.instant());
        Thread.sleep(10);
        System.out.println(clockDefault.instant());
        System.out.println(tickClock.instant());
    }

    private static void clockTestA() {
        // z时区时钟
        Clock systemUTCClock = Clock.systemUTC();
        // 系统时区时钟
        Clock systemDefaultZoneClock = Clock.systemDefaultZone();
        // 自定义时区时钟
        Clock gmd8Clock = Clock.system(ZoneId.of("Asia/Tokyo"));

        // 时区获取
        ZoneId utcClockZone = systemUTCClock.getZone();
        System.out.println(utcClockZone);

        ZoneId systemDefaultZoneClockZone = systemDefaultZoneClock.getZone();
        System.out.println(systemDefaultZoneClockZone);

        ZoneId gmd8ClockZone = gmd8Clock.getZone();
        System.out.println(gmd8ClockZone);

        // 时间戳毫秒值 永远是1970年01月01日00时00分00秒到当前时间的毫秒值，与时区无关
        System.out.println(systemUTCClock.millis());
        System.out.println(systemDefaultZoneClock.millis());
        System.out.println(gmd8Clock.millis());

        // 时间戳
        // Instant用于操作时间戳，默认时区UTC
        System.out.println(systemUTCClock.instant());
        System.out.println(systemDefaultZoneClock.instant());
        System.out.println(gmd8Clock.instant());

        // 基于某个时钟，有时间偏移的时钟
        // Duration基于秒，纳秒来操作 时 分 秒 纳秒 或时间差的计算，好处是不用人工计算时间了
        Clock offsetClock = Clock.offset(systemDefaultZoneClock, Duration.ofSeconds(10));
        // 两个时钟的偏移时间
        long offset = offsetClock.millis() - systemDefaultZoneClock.millis();
        System.out.println(offset);
    }

}
// 所有地区时区
//        ZoneId.getAvailableZoneIds().stream().forEach(System.out::println);

        /*
            America/Cuiaba
            Etc/GMT+9
            Etc/GMT+8
            Africa/Nairobi
            America/Marigot
            Asia/Aqtau
            Pacific/Kwajalein
            America/El_Salvador
            Asia/Pontianak
            Africa/Cairo
            Pacific/Pago_Pago
            Africa/Mbabane
            Asia/Kuching
            Pacific/Honolulu
            Pacific/Rarotonga
            America/Guatemala
            Australia/Hobart
            Europe/London
            America/Belize
            America/Panama
            Asia/Chungking
            America/Managua
            America/Indiana/Petersburg
            Asia/Yerevan
            Europe/Brussels
            GMT
            Europe/Warsaw
            America/Chicago
            Asia/Kashgar
            Chile/Continental
            Pacific/Yap
            CET
            Etc/GMT-1
            Etc/GMT-0
            Europe/Jersey
            America/Tegucigalpa
            Etc/GMT-5
            Europe/Istanbul
            America/Eirunepe
            Etc/GMT-4
            America/Miquelon
            Etc/GMT-3
            Europe/Luxembourg
            Etc/GMT-2
            Etc/GMT-9
            America/Argentina/Catamarca
            Etc/GMT-8
            Etc/GMT-7
            Etc/GMT-6
            Europe/Zaporozhye
            Canada/Yukon
            Canada/Atlantic
            Atlantic/St_Helena
            Australia/Tasmania
            Libya
            Europe/Guernsey
            America/Grand_Turk
            US/Pacific-New
            Asia/Samarkand
            America/Argentina/Cordoba
            Asia/Phnom_Penh
            Africa/Kigali
            Asia/Almaty
            US/Alaska
            Asia/Dubai
            Europe/Isle_of_Man
            America/Araguaina
            Cuba
            Asia/Novosibirsk
            America/Argentina/Salta
            Etc/GMT+3
            Africa/Tunis
            Etc/GMT+2
            Etc/GMT+1
            Pacific/Fakaofo
            Africa/Tripoli
            Etc/GMT+0
            Israel
            Africa/Banjul
            Etc/GMT+7
            Indian/Comoro
            Etc/GMT+6
            Etc/GMT+5
            Etc/GMT+4
            Pacific/Port_Moresby
            US/Arizona
            Antarctica/Syowa
            Indian/Reunion
            Pacific/Palau
            Europe/Kaliningrad
            America/Montevideo
            Africa/Windhoek
            Asia/Karachi
            Africa/Mogadishu
            Australia/Perth
            Brazil/East
            Etc/GMT
            Asia/Chita
            Pacific/Easter
            Antarctica/Davis
            Antarctica/McMurdo
            Asia/Macao
            America/Manaus
            Africa/Freetown
            Europe/Bucharest
            Asia/Tomsk
            America/Argentina/Mendoza
            Asia/Macau
            Europe/Malta
            Mexico/BajaSur
            Pacific/Tahiti
            Africa/Asmera
            Europe/Busingen
            America/Argentina/Rio_Gallegos
            Africa/Malabo
            Europe/Skopje
            America/Catamarca
            America/Godthab
            Europe/Sarajevo
            Australia/ACT
            GB-Eire
            Africa/Lagos
            America/Cordoba
            Europe/Rome
            Asia/Dacca
            Indian/Mauritius
            Pacific/Samoa
            America/Regina
            America/Fort_Wayne
            America/Dawson_Creek
            Africa/Algiers
            Europe/Mariehamn
            America/St_Johns
            America/St_Thomas
            Europe/Zurich
            America/Anguilla
            Asia/Dili
            America/Denver
            Africa/Bamako
            Europe/Saratov
            GB
            Mexico/General
            Pacific/Wallis
            Europe/Gibraltar
            Africa/Conakry
            Africa/Lubumbashi
            Asia/Istanbul
            America/Havana
            NZ-CHAT
            Asia/Choibalsan
            America/Porto_Acre
            Asia/Omsk
            Europe/Vaduz
            US/Michigan
            Asia/Dhaka
            America/Barbados
            Europe/Tiraspol
            Atlantic/Cape_Verde
            Asia/Yekaterinburg
            America/Louisville
            Pacific/Johnston
            Pacific/Chatham
            Europe/Ljubljana
            America/Sao_Paulo
            Asia/Jayapura
            America/Curacao
            Asia/Dushanbe
            America/Guyana
            America/Guayaquil
            America/Martinique
            Portugal
            Europe/Berlin
            Europe/Moscow
            Europe/Chisinau
            America/Puerto_Rico
            America/Rankin_Inlet
            Pacific/Ponape
            Europe/Stockholm
            Europe/Budapest
            America/Argentina/Jujuy
            Australia/Eucla
            Asia/Shanghai
            Universal
            Europe/Zagreb
            America/Port_of_Spain
            Europe/Helsinki
            Asia/Beirut
            Asia/Tel_Aviv
            Pacific/Bougainville
            US/Central
            Africa/Sao_Tome
            Indian/Chagos
            America/Cayenne
            Asia/Yakutsk
            Pacific/Galapagos
            Australia/North
            Europe/Paris
            Africa/Ndjamena
            Pacific/Fiji
            America/Rainy_River
            Indian/Maldives
            Australia/Yancowinna
            SystemV/AST4
            Asia/Oral
            America/Yellowknife
            Pacific/Enderbury
            America/Juneau
            Australia/Victoria
            America/Indiana/Vevay
            Asia/Tashkent
            Asia/Jakarta
            Africa/Ceuta
            Asia/Barnaul
            America/Recife
            America/Buenos_Aires
            America/Noronha
            America/Swift_Current
            Australia/Adelaide
            America/Metlakatla
            Africa/Djibouti
            America/Paramaribo
            Asia/Qostanay
            Europe/Simferopol
            Europe/Sofia
            Africa/Nouakchott
            Europe/Prague
            America/Indiana/Vincennes
            Antarctica/Mawson
            America/Kralendijk
            Antarctica/Troll
            Europe/Samara
            Indian/Christmas
            America/Antigua
            Pacific/Gambier
            America/Indianapolis
            America/Inuvik
            America/Iqaluit
            Pacific/Funafuti
            UTC
            Antarctica/Macquarie
            Canada/Pacific
            America/Moncton
            Africa/Gaborone
            Pacific/Chuuk
            Asia/Pyongyang
            America/St_Vincent
            Asia/Gaza
            Etc/Universal
            PST8PDT
            Atlantic/Faeroe
            Asia/Qyzylorda
            Canada/Newfoundland
            America/Kentucky/Louisville
            America/Yakutat
            Asia/Ho_Chi_Minh
            Antarctica/Casey
            Europe/Copenhagen
            Africa/Asmara
            Atlantic/Azores
            Europe/Vienna
            ROK
            Pacific/Pitcairn
            America/Mazatlan
            Australia/Queensland
            Pacific/Nauru
            Europe/Tirane
            Asia/Kolkata
            SystemV/MST7
            Australia/Canberra
            MET
            Australia/Broken_Hill
            Europe/Riga
            America/Dominica
            Africa/Abidjan
            America/Mendoza
            America/Santarem
            Kwajalein
            America/Asuncion
            Asia/Ulan_Bator
            NZ
            America/Boise
            Australia/Currie
            EST5EDT
            Pacific/Guam
            Pacific/Wake
            Atlantic/Bermuda
            America/Costa_Rica
            America/Dawson
            Asia/Chongqing
            Eire
            Europe/Amsterdam
            America/Indiana/Knox
            America/North_Dakota/Beulah
            Africa/Accra
            Atlantic/Faroe
            Mexico/BajaNorte
            America/Maceio
            Etc/UCT
            Pacific/Apia
            GMT0
            America/Atka
            Pacific/Niue
            Australia/Lord_Howe
            Europe/Dublin
            Pacific/Truk
            MST7MDT
            America/Monterrey
            America/Nassau
            America/Jamaica
            Asia/Bishkek
            America/Atikokan
            Atlantic/Stanley
            Australia/NSW
            US/Hawaii
            SystemV/CST6
            Indian/Mahe
            Asia/Aqtobe
            America/Sitka
            Asia/Vladivostok
            Africa/Libreville
            Africa/Maputo
            Zulu
            America/Kentucky/Monticello
            Africa/El_Aaiun
            Africa/Ouagadougou
            America/Coral_Harbour
            Pacific/Marquesas
            Brazil/West
            America/Aruba
            America/North_Dakota/Center
            America/Cayman
            Asia/Ulaanbaatar
            Asia/Baghdad
            Europe/San_Marino
            America/Indiana/Tell_City
            America/Tijuana
            Pacific/Saipan
            SystemV/YST9
            Africa/Douala
            America/Chihuahua
            America/Ojinaga
            Asia/Hovd
            America/Anchorage
            Chile/EasterIsland
            America/Halifax
            Antarctica/Rothera
            America/Indiana/Indianapolis
            US/Mountain
            Asia/Damascus
            America/Argentina/San_Luis
            America/Santiago
            Asia/Baku
            America/Argentina/Ushuaia
            Atlantic/Reykjavik
            Africa/Brazzaville
            Africa/Porto-Novo
            America/La_Paz
            Antarctica/DumontDUrville
            Asia/Taipei
            Antarctica/South_Pole
            Asia/Manila
            Asia/Bangkok
            Africa/Dar_es_Salaam
            Poland
            Atlantic/Madeira
            Antarctica/Palmer
            America/Thunder_Bay
            Africa/Addis_Ababa
            Asia/Yangon
            Europe/Uzhgorod
            Brazil/DeNoronha
            Asia/Ashkhabad
            Etc/Zulu
            America/Indiana/Marengo
            America/Creston
            America/Punta_Arenas
            America/Mexico_City
            Antarctica/Vostok
            Asia/Jerusalem
            Europe/Andorra
            US/Samoa
            PRC
            Asia/Vientiane
            Pacific/Kiritimati
            America/Matamoros
            America/Blanc-Sablon
            Asia/Riyadh
            Iceland
            Pacific/Pohnpei
            Asia/Ujung_Pandang
            Atlantic/South_Georgia
            Europe/Lisbon
            Asia/Harbin
            Europe/Oslo
            Asia/Novokuznetsk
            CST6CDT
            Atlantic/Canary
            America/Knox_IN
            Asia/Kuwait
            SystemV/HST10
            Pacific/Efate
            Africa/Lome
            America/Bogota
            America/Menominee
            America/Adak
            Pacific/Norfolk
            Europe/Kirov
            America/Resolute
            Pacific/Tarawa
            Africa/Kampala
            Asia/Krasnoyarsk
            Greenwich
            SystemV/EST5
            America/Edmonton
            Europe/Podgorica
            Australia/South
            Canada/Central
            Africa/Bujumbura
            America/Santo_Domingo
            US/Eastern
            Europe/Minsk
            Pacific/Auckland
            Africa/Casablanca
            America/Glace_Bay
            Canada/Eastern
            Asia/Qatar
            Europe/Kiev
            Singapore
            Asia/Magadan
            SystemV/PST8
            America/Port-au-Prince
            Europe/Belfast
            America/St_Barthelemy
            Asia/Ashgabat
            Africa/Luanda
            America/Nipigon
            Atlantic/Jan_Mayen
            Brazil/Acre
            Asia/Muscat
            Asia/Bahrain
            Europe/Vilnius
            America/Fortaleza
            Etc/GMT0
            US/East-Indiana
            America/Hermosillo
            America/Cancun
            Africa/Maseru
            Pacific/Kosrae
            Africa/Kinshasa
            Asia/Kathmandu
            Asia/Seoul
            Australia/Sydney
            America/Lima
            Australia/LHI
            America/St_Lucia
            Europe/Madrid
            America/Bahia_Banderas
            America/Montserrat
            Asia/Brunei
            America/Santa_Isabel
            Canada/Mountain
            America/Cambridge_Bay
            Asia/Colombo
            Australia/West
            Indian/Antananarivo
            Australia/Brisbane
            Indian/Mayotte
            US/Indiana-Starke
            Asia/Urumqi
            US/Aleutian
            Europe/Volgograd
            America/Lower_Princes
            America/Vancouver
            Africa/Blantyre
            America/Rio_Branco
            America/Danmarkshavn
            America/Detroit
            America/Thule
            Africa/Lusaka
            Asia/Hong_Kong
            Iran
            America/Argentina/La_Rioja
            Africa/Dakar
            SystemV/CST6CDT
            America/Tortola
            America/Porto_Velho
            Asia/Sakhalin
            Etc/GMT+10
            America/Scoresbysund
            Asia/Kamchatka
            Asia/Thimbu
            Africa/Harare
            Etc/GMT+12
            Etc/GMT+11
            Navajo
            America/Nome
            Europe/Tallinn
            Turkey
            Africa/Khartoum
            Africa/Johannesburg
            Africa/Bangui
            Europe/Belgrade
            Jamaica
            Africa/Bissau
            Asia/Tehran
            WET
            Europe/Astrakhan
            Africa/Juba
            America/Campo_Grande
            America/Belem
            Etc/Greenwich
            Asia/Saigon
            America/Ensenada
            Pacific/Midway
            America/Jujuy
            Africa/Timbuktu
            America/Bahia
            America/Goose_Bay
            America/Virgin
            America/Pangnirtung
            Asia/Katmandu
            America/Phoenix
            Africa/Niamey
            America/Whitehorse
            Pacific/Noumea
            Asia/Tbilisi
            America/Montreal
            Asia/Makassar
            America/Argentina/San_Juan
            Hongkong
            UCT
            Asia/Nicosia
            America/Indiana/Winamac
            SystemV/MST7MDT
            America/Argentina/ComodRivadavia
            America/Boa_Vista
            America/Grenada
            Asia/Atyrau
            Australia/Darwin
            Asia/Khandyga
            Asia/Kuala_Lumpur
            Asia/Famagusta
            Asia/Thimphu
            Asia/Rangoon
            Europe/Bratislava
            Asia/Calcutta
            America/Argentina/Tucuman
            Asia/Kabul
            Indian/Cocos
            Japan
            Pacific/Tongatapu
            America/New_York
            Etc/GMT-12
            Etc/GMT-11
            America/Nuuk
            Etc/GMT-10
            SystemV/YST9YDT
            Europe/Ulyanovsk
            Etc/GMT-14
            Etc/GMT-13
            W-SU
            America/Merida
            EET
            America/Rosario
            Canada/Saskatchewan
            America/St_Kitts
            Arctic/Longyearbyen
            America/Fort_Nelson
            America/Caracas
            America/Guadeloupe
            Asia/Hebron
            Indian/Kerguelen
            SystemV/PST8PDT
            Africa/Monrovia
            Asia/Ust-Nera
            Egypt
            Asia/Srednekolymsk
            America/North_Dakota/New_Salem
            Asia/Anadyr
            Australia/Melbourne
            Asia/Irkutsk
            America/Shiprock
            America/Winnipeg
            Europe/Vatican
            Asia/Amman
            Etc/UTC
            SystemV/AST4ADT
            Asia/Tokyo
            America/Toronto
            Asia/Singapore
            Australia/Lindeman
            America/Los_Angeles
            SystemV/EST5EDT
            Pacific/Majuro
            America/Argentina/Buenos_Aires
            Europe/Nicosia
            Pacific/Guadalcanal
            Europe/Athens
            US/Pacific
            Europe/Monaco

         */

